/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.common;

import applicationexcepcion.SpeseSpedizioneException;
import entity.AddettoNegozio;
import entity.SpeseSpedizione;
import facade.SpeseSpedizioneFacade;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Carmela
 */
@Stateless
public class SpeseSpedizioneManager implements SpeseSpedizioneManagerLocal {

    @EJB
    private SpeseSpedizioneFacade speseSpedizioneFacade;
    @PersistenceContext(unitName = "E-Market-ejbPU")
    private EntityManager em;

    @Override
    public SpeseSpedizione getSpeseSpedizione(Long idNegozio) {

        if (idNegozio == null) {

            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("speseSpedizione.speseDaNegozio");
        q.setParameter(1, idNegozio);

        if (q.getResultList().isEmpty()) {

            return null;
        } else {

            return (SpeseSpedizione) q.getSingleResult();
        }
    }

    @Override
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public boolean modificaSpese(float prezzo, AddettoNegozio addetto) throws SpeseSpedizioneException {

        if (addetto == null) {

            throw new NullPointerException();
        } else if (prezzo <= 0) {

            throw new IllegalArgumentException();
        }

        Query q = em.createNamedQuery("speseSpedizione.speseDaNegozio");
        q.setParameter(1, addetto.getNegozio().getId());

        if (q == null) {

            throw new SpeseSpedizioneException();
        } else {

            SpeseSpedizione sp = (SpeseSpedizione) q.getSingleResult();
            sp.setPrezzo(prezzo);

            speseSpedizioneFacade.edit(sp);
            return true;
        }
    }// modificaSpese

    @Override
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public boolean creaSpese(float prezzo, AddettoNegozio addetto) {

        if (addetto == null) {

            throw new NullPointerException();
        } else if (prezzo <= 0) {

            throw new IllegalArgumentException();
        }

        SpeseSpedizione sp = new SpeseSpedizione();
        sp.setAddetto(addetto);
        sp.setPrezzo(prezzo);

        speseSpedizioneFacade.create(sp);
        return true;
    }// creaSpese
}
